vlwkaos' digital garden

HTTP Cache - freshness

Freshness

언제 캐시를 갱신해야할까? HTTP는 클라이언트-서버간의 규약이기 때문에 서버가 직접 캐시나 클라이언트에 가서 알려줄수도 없는 노릇이다. 그래서 max-age와 같은 만료 기간을 설정하여 캐시를 비우는 처리(cache eviction이라 함)를 하는 것이다.

캐시가 만료하기 전까지 fresh하다고 하며, 만료 후에는 stale(썩음)이라고 한다. stale 리소스는 곧바로 교체되거나 무시되는 것이 아니라 요청에 If-None-Match 헤더가 함께 가서 실제로 변화가 있는지 확인한 후에 교체된다. 만약 정보가 여전히 최신의 것이라면 304(Not Modified) 응답이 돌아오며 실제 데이터는 가져오지 않는다.

만료기간을 정하지 않은 경우

만료기간이 없는 경우 캐시가 최신의 상태인지 어떻게 확인할 수 있을까? 이럴 때는 Last-Modified 헤더를 확인한다.

freshnessLifetime = Date - Last-modified / 10

expirationTime = responseTime + freshnessLifetime - currentAge

Referred in

HTTP Cache - freshness